{% if is_async %}
    {% if is_finite %}
void {{ name.lower_snake_case }}_async({% for param in params %}{{ param.type_info.name }} {{ param.name.lower_snake_case }}, {% endfor %}const {{ plugin_name.upper_camel_case }}::{{ name.upper_camel_case }}Callback& callback);
    {% else %}
{{ plugin_name.upper_camel_case }}::{{ name.upper_camel_case }}Handle subscribe_{{ name.lower_snake_case }}({% for param in params %}{{ param.type_info.name }} {{ param.name.lower_snake_case }}, {% endfor %}const {{ plugin_name.upper_camel_case }}::{{ name.upper_camel_case }}Callback& callback);

void unsubscribe_{{ name.lower_snake_case }}({{ plugin_name.upper_camel_case }}::{{ name.upper_camel_case }}Handle handle);
    {% endif %}
{% endif %}

{% if is_sync %}
{{ plugin_name.upper_camel_case }}::{{ return_type.name }} {{ name.lower_snake_case }}({% for param in params %}{{ param.type_info.name }} {{ param.name.lower_snake_case }}{% if not loop.last %}, {% endif %}{% endfor %}) const;
{% endif %}
